#ifndef __KERN_SYNC_SYNC_H__
#define __KERN_SYNC_SYNC_H__

#include <defs.h>
#include <intr.h>
#include <riscv.h>

// 内联函数，保存sstatus寄存器中的中断使能位 (SIE) 信息，并屏蔽中断的功能
static inline bool __intr_save(void) {
    // 读取sstatus寄存器中的中断使能位（SIE）
    if (read_csr(sstatus) & SSTATUS_SIE) {
        // 1代表中断启用->禁止中断
        intr_disable();
        return 1; // 保存中断状态1
    }
    return 0; // 保存中断状态0
}


// 内联函数，根据保存的中断使能位信息来使能中断
static inline void __intr_restore(bool flag) {
    if (flag) {
        // 之前中断是启用状态->启用状态
        intr_enable();
    }
}

#define local_intr_save(x) \
    do {                   \
        x = __intr_save(); \
    } while (0)
#define local_intr_restore(x) __intr_restore(x);

#endif /* !__KERN_SYNC_SYNC_H__ */